起源
FAT(File Allocation Table)文件配置表。用来记录文件所在位置的表格。假若丢失文件分配表,那么硬盘上的数据就会因无法定位而无法使用。
- 在 DOS v1.0 时代就引入了,是最基本的文件系统之一。
- FAT 家族:FAT12、FAT16、FAT32、ExFAT、VFAT
- 12 位地址,最大容量 16MB
- 为软盘设计的文件系统
FAT 结构
- FAT 文件系统把存储介质看成一维的数组,基本单位是簇(cluster)
- 存储介质被划分为 3 个区域:boot record、FAT、directory and data area
- 一个簇包含一个扇区,大小为 512B
Boot record
引导扇区包含了数据和代码,数据被称为 BPB(BIOS Parameter Block)。
File Allocation Table
- FAT1 和 FAT2 互为备份。
- 文件分配表被划分为紧密排列的若干个表项,每个表项都与数据区中的一个簇相对应,而且表项的序号也是与簇号一一对应的。
- 每 12 位成为一个 FAT 项(FATEntry),代表一个簇。所以 2 个 FAT 项会占用 3 个字节。
- 在 1.44M 软盘上,FAT 前三个字节的值是固定的 0xF0、0xFF、0xFF,用于表示这是一个应用在 1.44M 软盘上的 FAT12 文件系统。本来序号为 0 和 1 的 FAT 表项应该对应于簇 0 和簇 1,但是由于这两个表项被设置成了固定值,簇 0 和簇 1 就没有存在的意义了,所以数据区就起始于簇 2。
- FAT 项的值代表文件的下一个簇号:
- 值大于或等于 0xFF8,表示当前簇已经是本文件的最后一个簇
- 值为 0xFF7,表示它是一个坏簇
Directory area
根目录区由目录项(entry)组成,一个目录项占 32 个字节。
如果文件名过长,在原本的目录项后面会立即跟一个 LFN 项,同样也是 32 个字节。
Data area
数据区的第一个簇的簇号是 2,为什么?
数据区开始扇区号=根目录开始扇区号+根目录所占扇区数。
若为目录,格式同根目录项。
Reference
- https://wiki.osdev.org/FAT#File_Allocation_Table
- https://blog.csdn.net/qq_39654127/article/details/88429461#main-toc
制作 FAT12 镜像
Linux
- 在当前目录(.)创建一个新的软盘镜像
a.img
1 |
|
- 在当前目录下创建一个新目录
./mount
作为挂载点
1 |
|
- 将镜像
./a.img
挂载到./mount
下
1 |
|